{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "import sqlite3\n",
    "conn = sqlite3.connect('stock-data.db')\n",
    "c = conn.cursor()\n",
    "c.execute('''CREATE TABLE SZ000002\n",
    "          (ID  INT PRIMARY KEY NOT NULL,\n",
    "          TIME TEXT NOT NULL,\n",
    "          CODE TEXT NOT NULL,\n",
    "          HIGH REAL,\n",
    "          LOW REAL,\n",
    "          CLOSE REAL,\n",
    "          OPEN REAL,\n",
    "          DESCROPTION CHAR(50));''')\n",
    "conn.commit()\n",
    "conn.close()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "     ts_code trade_date   open   high    low  close  pre_close  change  \\\n",
      "0  000651.SZ   20250127  44.47  45.27  44.47  44.89      44.46    0.43   \n",
      "1  000651.SZ   20250124  44.27  44.88  43.93  44.46      44.27    0.19   \n",
      "2  000651.SZ   20250123  44.25  44.82  44.10  44.27      44.06    0.21   \n",
      "3  000651.SZ   20250122  44.66  44.74  43.55  44.06      44.76   -0.70   \n",
      "4  000651.SZ   20250121  45.38  45.40  44.62  44.76      45.08   -0.32   \n",
      "\n",
      "   pct_chg        vol       amount  \n",
      "0   0.9672  283539.72  1274083.766  \n",
      "1   0.4292  331517.45  1475277.190  \n",
      "2   0.4766  375097.78  1667303.257  \n",
      "3  -1.5639  396855.82  1746974.884  \n",
      "4  -0.7098  300010.69  1345248.908  \n",
      "      ts_code trade_date   open   high    low  close  pre_close  change  \\\n",
      "0   000651.SZ   20250127  44.47  45.27  44.47  44.89      44.46    0.43   \n",
      "1   000651.SZ   20250124  44.27  44.88  43.93  44.46      44.27    0.19   \n",
      "2   000651.SZ   20250123  44.25  44.82  44.10  44.27      44.06    0.21   \n",
      "3   000651.SZ   20250122  44.66  44.74  43.55  44.06      44.76   -0.70   \n",
      "4   000651.SZ   20250121  45.38  45.40  44.62  44.76      45.08   -0.32   \n",
      "5   000651.SZ   20250120  46.02  46.38  44.70  45.08      46.00   -0.92   \n",
      "6   000651.SZ   20250117  46.15  46.39  45.54  46.00      46.30   -0.30   \n",
      "7   000651.SZ   20250116  46.30  47.14  46.12  46.30      46.09    0.21   \n",
      "8   000651.SZ   20250115  45.52  46.84  45.46  46.09      45.64    0.45   \n",
      "9   000651.SZ   20250114  44.86  45.87  44.79  45.64      44.90    0.74   \n",
      "10  000651.SZ   20250113  45.80  45.97  44.69  44.90      46.40   -1.50   \n",
      "11  000651.SZ   20250110  47.34  47.76  46.25  46.40      47.50   -1.10   \n",
      "12  000651.SZ   20250109  47.30  47.65  46.71  47.50      47.24    0.26   \n",
      "13  000651.SZ   20250108  45.60  47.38  45.45  47.24      45.65    1.59   \n",
      "14  000651.SZ   20250107  45.81  46.36  45.10  45.65      46.02   -0.37   \n",
      "15  000651.SZ   20250106  45.94  46.52  45.28  46.02      45.74    0.28   \n",
      "16  000651.SZ   20250103  46.38  47.32  45.60  45.74      46.34   -0.60   \n",
      "17  000651.SZ   20250102  46.48  47.48  46.00  46.34      45.45    0.89   \n",
      "\n",
      "    pct_chg        vol       amount  \n",
      "0    0.9672  283539.72  1274083.766  \n",
      "1    0.4292  331517.45  1475277.190  \n",
      "2    0.4766  375097.78  1667303.257  \n",
      "3   -1.5639  396855.82  1746974.884  \n",
      "4   -0.7098  300010.69  1345248.908  \n",
      "5   -2.0000  618773.41  2797125.718  \n",
      "6   -0.6479  245895.47  1131875.332  \n",
      "7    0.4556  297938.35  1386882.882  \n",
      "8    0.9860  328817.41  1521038.271  \n",
      "9    1.6481  315821.75  1434156.901  \n",
      "10  -3.2328  421112.41  1903557.019  \n",
      "11  -2.3158  371612.52  1734493.429  \n",
      "12   0.5504  454126.44  2148119.227  \n",
      "13   3.4830  778213.29  3639432.912  \n",
      "14  -0.8040  444060.77  2032272.815  \n",
      "15   0.6122  542128.13  2489906.993  \n",
      "16  -1.2948  527086.18  2436435.046  \n",
      "17   1.9582  952532.45  4449784.976  \n"
     ]
    }
   ],
   "source": [
    "import sqlite3\n",
    "import tushare as ts\n",
    "import pandas as pd\n",
    "def pro_daily_stock(code, start_date,end_date):\n",
    "    ts.set_token('e67298b15a0af8266c6f0346df61429a94bd13c591e3c3711022daae')\n",
    "    pro = ts.pro_api()\n",
    "    df_daily = pro.daily(ts_code= code,start_date= start_date,end_date = end_date)\n",
    "    return df_daily\n",
    "\n",
    "df_gldq = pro_daily_stock(code = '000651.SZ', start_date='20250101', end_date='20250201')\n",
    "print(df_gldq.head())\n",
    "\n",
    "conn = sqlite3.connect('stock-data.db')\n",
    "df_gldq.to_sql(name='STOCK000651',con=conn,index=False,if_exists='replace')\n",
    "sql_gldq = pd.read_sql_query(\"select * from 'STOCK000651';\", conn)\n",
    "print(sql_gldq)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "      ts_code trade_date   open   high    low  close  pre_close  change  \\\n",
      "0   001298.SZ   20250430  27.31  28.60  26.95  27.98      27.58    0.40   \n",
      "1   001298.SZ   20250429  26.66  27.91  26.59  27.58      27.15    0.43   \n",
      "2   001298.SZ   20250428  26.39  28.60  26.13  27.15      26.82    0.33   \n",
      "3   001298.SZ   20250425  25.09  26.82  24.55  26.82      24.38    2.44   \n",
      "4   001298.SZ   20250424  24.80  25.39  24.30  24.38      24.80   -0.42   \n",
      "..        ...        ...    ...    ...    ...    ...        ...     ...   \n",
      "73  001298.SZ   20250108  24.08  24.44  23.50  24.18      24.32   -0.14   \n",
      "74  001298.SZ   20250107  23.25  24.32  23.25  24.32      23.23    1.09   \n",
      "75  001298.SZ   20250106  23.35  23.66  22.66  23.23      23.48   -0.25   \n",
      "76  001298.SZ   20250103  24.73  25.16  23.47  23.48      24.68   -1.20   \n",
      "77  001298.SZ   20250102  25.00  25.63  24.28  24.68      25.05   -0.37   \n",
      "\n",
      "    pct_chg        vol      amount  \n",
      "0    1.4503  177099.46  492255.755  \n",
      "1    1.5838  166271.82  453490.688  \n",
      "2    1.2304  246815.54  675180.630  \n",
      "3   10.0082  119954.20  311829.707  \n",
      "4   -1.6935   90631.38  224539.372  \n",
      "..      ...        ...         ...  \n",
      "73  -0.5757   32842.39   79191.878  \n",
      "74   4.6922   37685.85   89668.037  \n",
      "75  -1.0647   26175.46   60828.965  \n",
      "76  -4.8622   37796.94   91262.141  \n",
      "77  -1.4770   40259.86  100667.825  \n",
      "\n",
      "[78 rows x 11 columns]\n"
     ]
    }
   ],
   "source": [
    "import tushare as ts\n",
    "import json\n",
    "import time\n",
    "import pandas as pd\n",
    "def json_to_str():\n",
    "    #load 将文件中的字符串变换为数据类型\n",
    "    with open(\"stock_pool.json\", \"r\", encoding='utf-8') as f:\n",
    "        stock_index = json.load(f)\n",
    "    # print(stock_index)\n",
    "    return stock_index\n",
    "\n",
    "def pro_daily_stock(code, start_date,end_date):\n",
    "    ts.set_token('e67298b15a0af8266c6f0346df61429a94bd13c591e3c3711022daae')\n",
    "    pro = ts.pro_api()\n",
    "    df_daily = pro.daily(ts_code= code,start_date= start_date,end_date = end_date)\n",
    "    return df_daily\n",
    "\n",
    "def stock_to_sql_for(table_name, con_name,start='20250101',end='20250501'):\n",
    "    stock_index = json_to_str()\n",
    "    stock_code = list(list(stock_index[1].values())[0].values())\n",
    "    for code in stock_code:\n",
    "        try:\n",
    "            data = pro_daily_stock(code, start, end)\n",
    "            time.sleep(0.2)\n",
    "            data.to_sql(table_name, con_name, index=False, if_exists='replace')\n",
    "            # print(\"right code is %s\" % code)\n",
    "        except:\n",
    "            print(\"errror code is %s\" % code)\n",
    "#读取整张表数据\n",
    "    df = pd.read_sql_query(\"select * from \" + table_name, con_name)\n",
    "    print(df)\n",
    "\n",
    "conn = sqlite3.connect('stock-data.db')\n",
    "stock_to_sql_for('STOCK000001', conn)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "     ts_code trade_date  close  pct_chg        vol\n",
      "0  001298.SZ   20250425  26.82  10.0082  119954.20\n",
      "1  001298.SZ   20250411  24.32   9.9955   92614.33\n",
      "2  001298.SZ   20250305  31.85  10.0173  210329.19\n",
      "3  001298.SZ   20250304  28.95   9.9924  167914.26\n",
      "4  001298.SZ   20250224  28.24   5.4518  204643.08\n",
      "5  001298.SZ   20250217  27.19   9.9919  163995.10\n",
      "6  001298.SZ   20250205  24.67   5.2474   67404.25\n"
     ]
    },
    {
     "data": {
      "image/png": "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Qi1Ovw42TVKYsQ433XSTrw7ejlyX64RjHh36qocd9HCNbahF7nXwwv6qVauke/fu8sknn8iCBQvM/3p+JB0Sr8OfbbHhNOrgTewZagg3IWTLli1y4YUXmmOk+s18x44dMm7cOLnrrrvMN3I9huptsJq29dvZSy+9JM8//7w5W6turLagFi7q4L8OP//8c6Y6qKw7ab1d+yBl7JtkA2qRex0GDRpkwpz2IdFWTV0+b948X9DXn3XGXf3Qt8GWcK1DoI+LIf+0176OYMjYk3/8+PFO27ZtnT59+vhmjFRDhw41vdt1eN8333zj2IZauKhDweugo0Fuu+0258wzzwy68+EUBmqRdx1uuukmc/2rr75yNm/e7LtPsM62ezpGh2kdaLkJsQmXkpKSfNe1GVm/jensmdu2bTMjHbzZNc855xyTuDV56yRNtqEWLupQsDrooQY9R86uXbvk888/D77z4RQCapF3HX744QfTevGXv/zFTGbo8WZhtklymNaBcBMCvA+nVq1amWPm3333na8vRWRkpJldMi4uTubOnWumVld6XFVP6qbDOm1CLVzUoeB10OHQuqxnz54yffr00BnSmk/UIv910M7Tc+bM8f1t2OhEuNch0E1HyNnWrVudP/74w3f9999/d2rXrm1OPe8t94bq7du3zylVqpSZSdJG1MJFHVzUIR21OPU6zJ4927ENdXDRchOk1q5da04nr6la6fDNmJgY+fDDD01vdj2h2++//+4bwqcdBHWSvlAbrpcf1MJFHVzUIR21OL06VKtWTWxCHTL4X8hBEFmzZo2ZUOvBBx/0e/uSJUvMNNiXX365k5iYaM7zofeNjo72nSfGFtTCRR1c1CEdtXBRBxd1yIxwE2Q2btzolC5d2hkzZoy5rrNILlq0yElISDA92nU2UfXDDz843bp1cxo1auSce+65TrNmzawb7UAtXNTBRR3SUQsXdXBRh+wIN0FEN0gdtqfDdTds2GCWXXrppU5sbKwZvlu/fn3nsssu8524TM/2/euvv5oT3+3du9exCbVwUQcXdUhHLVzUwUUd/CPcBOH5X3TeCT3vS/PmzU0nMG1u1PMDvf/+++a08z179nRSUlIc21ELF3VwUYd01MJFHVzUITvCTRBKTk52Bg0aZCZZ8pK4R09sFxMTY05RHw6ohYs6uKhDOmrhog4u6pBZ6Yydi1H8fvvtN3NeD50iXydZ08nVdIp8PfePToddv35935wFOrFSgwYNzCnoIyIixDbUwkUdXNQhHbVwUQcXdcgb4SaA1q1bJz169JCoqCgzc2jdunXNicp69eolNWvWNEP4vCF73oyRCxcuNGfx1TM/24RauKiDizqkoxYu6uCiDvmUpSUHxTjR0tlnn+088MADzv79+82wvPj4eOfWW2815/XwJlny6FC9YcOGOdWqVXO+++47xybUwkUdXNQhHbVwUQcXdcg/wk0AHD161JzE8IYbbjA/e6ZNm2ZOYLdnz55M9//666/Nxtu4cWNn9erVjk2ohYs6uKhDOmrhog4u6lAwHJYKAJ01UpsI9dTyegxUQ6Y2I+pp6fXEhseOHct0/3bt2snBgwdlzJgxUqtWLbEJtXBRBxd1SEctXNTBRR0KqIBhCIVk27Ztvp+9pkQ9B0iDBg2cHTt2+G7TZkfbUQsXdXBRh3TUwkUdXNQh/zi3VDHR83msWLFC5s+fbxJ4vXr1fL3Zvc5fKSkpsm/fPt9jRo4cKZdffrns3bvXdzZXG1ALF3VwUYd01MJFHVzU4TQUIAjhFK1du9apU6eOmfJaZ4zUY6AzZszwzQ7pJfDNmzc71atXN2duHTt2rFOuXDnrEji1cFEHF3VIRy1c1MFFHU4P4aYYJlbSjfLhhx92fvzxRzPtde/evZ0mTZo4o0aNMrd7du3a5bRu3drcHhERYd0GSi1c1MFFHdJRCxd1cFGH00e4KWLff/+9U7du3WwbnJ6NtUWLFs6zzz7rpKammmU6q6SeH0STt42926mFizq4qEM6auGiDi7qcProc1PEtAf78ePH5dChQ+b64cOHzf9PP/20XHLJJTJ58mTZunWrWaYzSA4aNMjMPNmqVSuxDbVwUQcXdUhHLVzUwUUdTl8JTTiF8DzIhQ7J06F6n332mbl+9OhRiYyMND9fcMEFZmrst99+21w/cuSIlC1bVmxFLVzUwUUd0lELF3VwUYfTQ8tNIUtNTTVzCxw4cMC37NVXX5Xvv/9ebrrpJnNdN1BN5apTp07mMR6bNlBq4aIOLuqQjlq4qIOLOhQ+wk0h2rBhg1x//fXSuXNnM9HS9OnTzXL9+cUXX5QFCxaY839ok2PJkm7pk5OTpUKFCmajtakRjVq4qIOLOqSjFi7q4KIORaQQ+u3gfx3AdArsIUOGONOnTzfTZJcpU8ZZtWqVuV07f3300UfmvCDaC75Hjx5mGu0KFSo469atc2xCLVzUwUUd0lELF3VwUYeiQ5+bQvDHH39Inz59pHHjxiZpe7TjV4sWLeSll17yLdOmxyeeeMI8RpsS77zzTmnatKnYglq4qIOLOqSjFi7q4KIORYtzSxUCbS7cv3+/9OzZ01zXmSS1+VBnk9SNUf1v2L2cccYZ8swzz2S6n02ohYs6uKhDOmrhog4u6lC0qFAhiI6Olrfeeks6duzomxpb6cnKvI1Qp8rWnzN2GPOmz7YJtXBRBxd1SEctXNTBRR2KFuGmkDRs2NCXqsuUKWN+1sStHb8848aNk6lTp/p6vNu6kVILF3VwUYd01MJFHVzUoehwWKqQacr2TkXvXfdOZqbHTFevXi2lS4dH2amFizq4qEM6auGiDi7qUPhouSkCXh9t3Rhr164tzz//vDz77LPy7bffSmxsrIQTauGiDi7qkI5auKiDizoULqJgEfBStzYzTpkyRSpVqiRLly6V888/X8INtXBRBxd1SEctXNTBRR0KFy03Rahr167m/2XLlknbtm0lnFELF3VwUYd01MJFHVzUoXAwz00R0ymydSZJUAsPdXBRh3TUwkUdXNTh9BFuAACAVTgsBQAArEK4AQAAViHcAAAAqxBuAACAVQg3AADAKoQbAABgFcINAACwCuEGAABYhXADAACsQrgBAABik/8HSF6QkZKVTLEAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import pandas as pd\n",
    "import sqlite3\n",
    "import matplotlib.pyplot as plt\n",
    "conn = sqlite3.connect('stock-data.db')\n",
    "# 涨幅超过5%，收盘价9到100元\n",
    "df = pd.read_sql_query(\"select * from 'STOCK000001' where close > 9 and close < 100 and pct_chg > 5\", conn)\n",
    "print(df.loc[:,['ts_code','trade_date','close','pct_chg','vol']])\n",
    "\n",
    "\n",
    "# 涨幅超过5%的个股在某些日期内的分布\n",
    "df = pd.read_sql_query(\"select * from 'STOCK000001'  where pct_chg > 5\", conn)\n",
    "count_ = df.groupby('trade_date')['ts_code'].count()\n",
    "\n",
    "# 绘图\n",
    "plt.bar(range(len(count_.index)), count_.values, align='center',color='steelblue',alpha = 0.8)\n",
    "# 添加轴标签\n",
    "plt.ylabel('count')\n",
    "# 添加刻度标签\n",
    "plt.xticks(range(len(count_.index)), count_.index, rotation=45)\n",
    "# 添加标题\n",
    "plt.title('pct_chg > 5 time distribution')\n",
    "# 为每个条形图添加数值标签\n",
    "for x,y in enumerate(count_.values):\n",
    "    plt.text(x, y ,'%s'%y, ha='center')\n",
    "# 显示图形\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "     ts_code trade_date  close  pct_chg        vol\n",
      "0  001298.SZ   20250408  21.22  -7.8193   77140.08\n",
      "1  001298.SZ   20250407  23.02 -10.0078   33809.80\n",
      "2  001298.SZ   20250313  28.06  -5.0102  151804.88\n"
     ]
    },
    {
     "data": {
      "image/png": "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LVt2vs8NAAAQHN1STZo0kVGjRskXX3whrVq1kvLly/v8/Z577glU+QAAAIo/3MycOVOqVKkin376qbnkpAOKCTcAAKBUhRtdzA8AAMCaMTcAAABWtdzcdtttBf49JSXlXMsDAABQ8uFGp4LndPr0afnmm2/kyJEjfk+oCQAAENTh5p133smzTU/BoKsWN27cOBDlAgAAcHfMTZkyZSQxMVGee+65QD0kAACAuwOKv//+e/n9998D+ZAAAADF3y2lLTQ5eTwe+emnn2TRokWSkJBwLg8JAADgXrjZvHlzni6pWrVqyeTJkwudSQUAABB04WblypWBLwkAAIBb4caRlpYmO3fuNL9feumlpvUGAACg1A0ozsjIMN1PderUkauvvtpc6tatK0OGDJETJ04EvpQAAADFGW50QLGeMPODDz4wC/fp5b333jPbHnjggXN5SAAAAPe6pd566y1588035ZprrvFu69Wrl1SsWFFuueUWmTFjRmBKBwAAUBItN9r1FBUVlWd77dq16ZYCAAClL9x07txZxowZI6dOnfJuO3nypIwdO9b8DQAAoFR1S02dOlV69uwpF110kbRp08Zs++qrryQ8PFyWLVsW6DICAAAUb7hp1aqV7Nq1S+bOnSs7duww2wYMGCADBw40424AAADcck7hJikpyYy5GTp0qM/2lJQUs/bNI488EqjyAQAAFP+Ym5deekmaNWuWZ/tll10mycnJ5/KQAAAA7oWb1NRUs4BfbrpCsZ5AEwAAoFSFm5iYGPn888/zbNdtulIxAABAqRpzo2Nt7rvvPjl9+rRce+21ZtuKFSvk4YcfZoViAABQ+sLNQw89JD///LMMGzZMsrKyzLaIiAgzkHjkyJGBLiMAAEDxhpuwsDCZOHGijBo1SrZv326mfzdt2tSscwMAAFDqwo2jSpUqcvnllweuNAAAAG4MKAYAAAhWhBsAAGAVwg0AALAK4QYAAFiFcAMAAKxCuAEAAFYh3AAAAKsQbgAAgFUINwAAwCqEGwAAYBXCDQAAsArhBgAAWIVwAwAArEK4AQAAViHcAAAAqxBuAACAVQg3AADAKoQbAABglaAIN9OmTZMGDRpIRESEdOrUSdavX1+k+82bN0/CwsKkX79+xV5GAABQOrgebubPny+JiYkyZswY2bRpk7Rp00bi4uLk8OHDBd5v37598uCDD0qX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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import pandas as pd\n",
    "import sqlite3\n",
    "import matplotlib.pyplot as plt\n",
    "conn = sqlite3.connect('stock-data.db')\n",
    "# 跌幅超过5%，收盘价9到100元\n",
    "df = pd.read_sql_query(\"select * from 'STOCK000001' where close > 9 and close < 100 and pct_chg < -5\", conn)\n",
    "print(df.loc[:,['ts_code','trade_date','close','pct_chg','vol']])\n",
    "\n",
    "\n",
    "# 跌幅超过5%的个股在某些日期内的分布\n",
    "df = pd.read_sql_query(\"select * from 'STOCK000001'  where pct_chg < -5\", conn)\n",
    "count_ = df.groupby('trade_date')['ts_code'].count()\n",
    "\n",
    "# 绘图\n",
    "plt.bar(range(len(count_.index)), count_.values, align='center',color='steelblue',alpha = 0.8)\n",
    "# 添加轴标签\n",
    "plt.ylabel('count')\n",
    "# 添加刻度标签\n",
    "plt.xticks(range(len(count_.index)), count_.index, rotation=45)\n",
    "# 添加标题\n",
    "plt.title('pct_chg > 5 time distribution')\n",
    "# 为每个条形图添加数值标签\n",
    "for x,y in enumerate(count_.values):\n",
    "    plt.text(x, y ,'%s'%y, ha='center')\n",
    "# 显示图形\n",
    "plt.show()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.1"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
